/*
Copyright (c) [2019年5月1日] [吴超]
[MBT_studio] is licensed under Mulan PSL v2.
You can use this software according to the terms and conditions of the Mulan PSL v2.
You may obtain a copy of Mulan PSL v2 at:
http://license.coscl.org.cn/MulanPSL2
THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
See the Mulan PSL v2 for more details.
*/
#pragma once


#include "A_引擎/引擎.h"
#include "B_场景管理/操作记录.h"


void f_om_添加渲染物体(const std::set<S_物体*>& ob, std::u16string name);
void f_om_添加渲染物体(const std::set<S_物体*>& ob);

void f_om_删除渲染物体(const std::set<S_物体*>& ob);

void f_om_销毁所有物体();


void f_om_设置拾取物体(const std::set<S_物体*>& obs, bool 多选物体, E_工作区类型 工作区类型);

void f_OM_排除拾取物体(const std::set<S_物体*>& obs, E_工作区类型 工作区类型);

void f_OM_框选物体(E_工作区类型 工作区类型, bool 反选);
void f_OM_反选物体(const std::set<S_物体*>& ob, E_工作区类型 工作区类型);



class C_om_添加渲染物体 : public C_操作记录 {
	std::set<S_物体*> m_以拾取物体;
	std::set<S_物体*> m_ob;
public:
	C_om_添加渲染物体(const std::set<S_物体*>& ob, std::u16string name);
	C_om_添加渲染物体(const std::set<S_物体*>& ob);
	~C_om_添加渲染物体();

	uint8 f_重做();
	uint8 f_撤销();
	
};



class C_om_删除渲染物体 : public C_操作记录 {
	std::set<S_物体*> m_删除物体;
	std::set<S_物体*> m_拾取物体;

public:
	C_om_删除渲染物体(const std::set<S_物体*>& ob);
	~C_om_删除渲染物体();

	uint8 f_重做();
	uint8 f_撤销();
};



class C_om_拾取物体 : public C_操作记录 {
	std::set<S_物体*>	m_以拾取物体;
	std::set<S_物体*>	m_新拾取物体;
	E_工作区类型		m_工作区类型;
public:
	C_om_拾取物体(const std::set<S_物体*>& ob, bool 多选物体, E_工作区类型 工作区类型);
	~C_om_拾取物体();

	uint8 f_重做();
	uint8 f_撤销();
	
};

class C_om_排除拾取物体 : public C_操作记录 {
	std::set<S_物体*>	m_排除的物体;
	E_工作区类型		m_工作区类型;
public:
	C_om_排除拾取物体(const std::set<S_物体*>& ob, E_工作区类型 工作区类型);
	~C_om_排除拾取物体();

	uint8 f_重做();
	uint8 f_撤销();

};

class C_om_反选物体 : public C_操作记录 {
	std::set<S_物体*>	m_当前拾取物体;
	E_工作区类型		m_工作区类型;
public:
	C_om_反选物体(const std::set<S_物体*>& ob, E_工作区类型 工作区类型);
	~C_om_反选物体();

	uint8 f_重做();
	uint8 f_撤销();

};











